1. Field of the Invention
The present invention related to the field of C++ programming language technologies and, more particularly, to a compiler neutral linking solution for C++ code.
2. Description of the Related Art
The C++ programming language is a superset of the C programming language that includes extensions for object oriented programming. Similar to the C programming language, the C++ programming language is typically implemented as a compiled language. A C++ compiler translates source code written in the C++ language to object code, which includes machine code and linking information. Multiple compiled modules of object code are linked, using a linker, to create an executable program or a runtime library.
The linking information can include defined or exported linking symbols as well as undefined or imported linking symbols. Exported symbols are functions or variables that are present in the compiled module, which are available to other modules. The imported symbols are functions or variables that are referenced but are not internally defined. The imported symbols are local placeholders that correspond to the exported symbols contained within a different software module. The linker replaces placeholders of undefined symbols (imported symbols) with corresponding defined symbol (exported symbol) addresses, which permits multiple code modules to interact with each other.
In the C programming language, naming conventions for linking symbols are standardized and are the same for every implementation of the C programming language. This is, however, not true for the C++ programming language, where naming conventions for linking symbols are not standardized and can vary from implementation to implementation. Thus, different symbol naming conventions can be used by different C++ compilers. As a result, software modules compiled with different C++ compilers are often unable to be properly linked, which means that it is practically impossible for modules written in C++ and built by different compilers to interoperate. This can be a serious disadvantage or even a showstopper for many cooperative software projects involving development entities that use different design platforms, each design platform having its own C++ compiler.